/**
 * UIImage+GTExtension.m
 *
 * The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
 * you may not use this file except in compliance with the License. You may obtain a copy of the License 
 * at http://www.mozilla.org/MPL/
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
 * either express or implied. See the License for the specific language governing rights and limitations 
 * under the License.
 *
 * The Original Code is gcast-toolbox4iphone.
 *
 * The Initial Developers of the Original Code is Giannandrea Castaldi.
 */

#import "UIImage+GTExtension.h"

@implementation UIImage (GTExtension)

- (UIImage*)paintWithColor:(UIColor*)color {
//  UIGraphicsBeginImageContext(self.size);
  GTGraphicsBeginRetinaAwareImageContext(self.size);
  
  CGRect contextRect;
  contextRect.origin.x = 0.0f;
  contextRect.origin.y = 0.0f;
  contextRect.size = self.size;
  // Retrieve source image and begin image context
  CGSize itemImageSize = self.size;
  CGPoint itemImagePosition; 
  itemImagePosition.x = ceilf((contextRect.size.width - itemImageSize.width) / 2);
  itemImagePosition.y = ceilf((contextRect.size.height - itemImageSize.height) );
  
//  UIGraphicsBeginImageContext(contextRect.size);
  GTGraphicsBeginRetinaAwareImageContext(contextRect.size);
  
  CGContextRef c = UIGraphicsGetCurrentContext();
  CGContextBeginTransparencyLayer(c, NULL);
  CGContextScaleCTM(c, 1.0, -1.0);
  CGContextClipToMask(c, CGRectMake(itemImagePosition.x, -itemImagePosition.y, itemImageSize.width, -itemImageSize.height), [self CGImage]);
  
  [color set];
  
  contextRect.size.height = -contextRect.size.height;
  contextRect.size.height -= 15;
  CGContextFillRect(c, contextRect);
  CGContextEndTransparencyLayer(c);
  
  UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return result;
}

@end


void GTGraphicsBeginRetinaAwareImageContext(CGSize size) {
	static CGFloat scale = -1.0;
	if (scale < 0.0) {
		UIScreen *screen = [UIScreen mainScreen];
		if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
			scale = [screen scale];
		}
		else {
			scale = 0.0;	// mean use old api
		}
	}
	if (scale>0.0) {
		UIGraphicsBeginImageContextWithOptions(size, NO, scale);
	}
	else {
		UIGraphicsBeginImageContext(size);
	}
}

